Estoy tratando de obtener una serie de argumentos de una cadena haciendo lo siguiente
const str = `argument "second argument" 'third argument' \`fourth argument\``; str.split(/\s(?=(?:[^'"`]*(['"`])[^'"`]*\1)*[^'"`]*$)/g);El resultado esperado:
['argument', '"second argument"', "'third argument'", '`fourth argument`']Pero sale esto:
['argument', '`', '"second argument"', '`', "'third argument'", '`', '`fourth argument`']¿Cómo puedo recuperar una matriz de solo 4 elementos?
Después de obtener una matriz, puede usar el filter para filtrar la cadena no deseada
const str = `argument "second argument" 'third argument' \`fourth argument\``; const result = str .split(/\s(?=(?:[^'"`]*(['"`])[^'"`]*\1)*[^'"`]*$)/g) .filter((s) => /[az]/.test(s)); console.log(result);También puede lograr el mismo resultado usando la manipulación de cadenas
const str = `argument "second argument" 'third argument' \`fourth argument\``; const replacerFn = (match) => match.split(" ").join("_"); const result = str .replace(/".*?"|'.*?'|`.*?`/g, replacerFn) .split(" ") .map((s) => s.split("_").join(" ")); console.log(result);Sugiero que estandarice su cadena antes de dividirla en matriz
Reemplace todo ` por " y así